package ar.com.gals.repository;

import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.CriteriaSpecification;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;

import ar.com.gals.domain.TipoObservacion;
import ar.com.gals.domain.UnidadMedida;

public class TipoObservacionRepository extends AbstractRepository<TipoObservacion> {

	public TipoObservacionRepository(Session session) {
		super(session, TipoObservacion.class);
	}

	
	@SuppressWarnings("unchecked")
	public List<TipoObservacion> getAll(String nombre, UnidadMedida unidadMedida) {
		Criteria criteria = this.session.createCriteria(domain);
				
		if(nombre != null && !nombre.isEmpty())
			criteria.add(Restrictions.ilike("nombre", "%"+nombre+"%"));
		if(unidadMedida != null)
			criteria.add(Restrictions.eq("unidadMedida", unidadMedida));
		
		criteria.add(Restrictions.isNull("fechaDelete"));
		criteria.addOrder(Order.asc("nombre"));
		criteria.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);
		
		List<TipoObservacion> list = (List<TipoObservacion>) criteria.list();
		return list;
	}
	
	
	@SuppressWarnings("unchecked")
	public TipoObservacion getByName(String nombre) {
		Criteria criteria = this.session.createCriteria(domain)
				.add(Restrictions.ilike("nombre", nombre))
				.add(Restrictions.isNull("fechaDelete"))
				.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);
		List<TipoObservacion> list = (List<TipoObservacion>) criteria.list();
		if(list.isEmpty()) return null;
		return (TipoObservacion) list.get(0);
	}
}
